// 配置路由
// 引入
import VueRouter from "vue-router"
import Vue from "vue"

// 2、注册全局组件
Vue.use(VueRouter)

// 3、定义路由规则
const routes = [
    {
        path: "/",
        redirect: "/login"
    },
    {     // 登录
        path: "/login",
        component: ()=>import("@/views/login.vue")
    },
    {
        path: "/register",
        component: ()=>import("@/views/register.vue")
    },
    {
        path: "/personal",
        component: ()=>import("@/views/personal.vue")
    },
    {
        path: "/edit_profile",
        component: ()=>import("@/views/edit_profile.vue")
    },
    {
        path: "/index",
        component: ()=>import("@/views/index.vue"),
        meta: { // 路由元信息，就是用来保存数据的地方
            // // 保存首页栏目当前下标值
           
            curIndex: 1,    
        }
    },
    {
        path: "/articleDetail",
        component: ()=>import("@/views/articleDetail.vue")
    },
    {
        path: "/comment",
        component: ()=>import("@/views/comment.vue")
    },
    {
        path: "/category",
        component: ()=>import("@/views/category.vue")
    },
    {
        path: "/search",
        component: ()=>import("@/views/search.vue")
    }
]

// 4、生成路由对象
const router = new VueRouter({
    routes
})

// 全局前置导航守卫，路由权限管理
// 设置一个白名单，所有在数组arr中的路径，都表示必须登录后才能访问
let arr = ["/personal","/edit_profile"];
router.beforeEach((to,from,next)=>{
    let token = localStorage.getItem("72-token");
    // if(to.path=="/personal"&&!token||to.path=="/edit_profile"&&!token){
    if( arr.indexOf(to.path) !=-1 &&!token){
        next("/login"); // 如果没有登录直接跳转到登录页面
    }else{
        if(to.path=="/index"&&from.path=="/login"){
             // curIndex的初始值，需要根据是否登录设置（因为未登录的时候头条数组的第一个位置，登录后头条在数组的第二位）
            // 因此判断登陆后初始值为1 未登录初始值为0
            to.meta.curIndex = localStorage.getItem("72-token")?1:0;
        }
        next()
    }
})

// 重新下载路由也能解决这个问题
// 解决重复跳转到同一个路由地址报错问题
// 解决跳转页面之前进行重定向报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
    return originalPush.call(this, location).catch(err => err)
}

// 5、导出路由对象
export default router